/**
 * @author jia
 * @date 2021/2/21
 */

/**
 * 静态代理模式总结：
 * 真实对象和静态代理都要实现同一个接口
 * 代理对象要代理真实角色
 * <p>
 * 好处：
 * 1.代理对象可以做很多真实对象做不了的事情
 * 2.真实对象专注做自己的事情
 */
public class StaticProxy {
    public static void main(String[] args) {
        You you = new You();


        //上下作对比，都是静态代理
        new Thread(() -> System.out.println("IOV")).start();

        new WeddingCompany(you).HappyMarry();
    }
}

interface Marry {
    void HappyMarry();
}

//真实角色
class You implements Marry {

    @Override
    public void HappyMarry() {
        System.out.println("结婚了");
    }
}

//代理角色
class WeddingCompany implements Marry {
    //代理谁-->真实目标角色
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();//这是真实对象
        after();
    }

    private void after() {
        System.out.println("---after---");
    }

    private void before() {
        System.out.println("---before---");
    }
}